﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;

namespace AvaProvi
{
    [Serializable]
    public class clsDeclaracionAdvertencia_CRN:clsEstado,IControlEstados
    {
        public clsAvaluo_CRN Avaluo { get; set; }

        /*Los tipos pueden ser:
         * DEC = Declaracion
         * ADV = Advertencia
         * OTA = Otra Advertencia
         * OTD = Otra declaración */
        public string Tipo { get; set; }
        public string Descripcion { get; set; }
        public int ID { get; set; }

        public clsDeclaracionAdvertencia_CRN(clsAvaluo_CRN objAvaluo, string tipo):base()
        {
            this.Avaluo = objAvaluo;
            this.Tipo = tipo;
            this.Descripcion = string.Empty;
        }


        public bool Guardar()
        {
            if (this.DatosValidos())
            {
                if (this.EsNuevo)
                    return CreaDeclaracionAdvertencia();
                else
                {
                    if (this.EsModificado)
                        return ActualizaDeclaracionAdvertencia();
                    else
                        return EliminaDeclaracionAdvertencia();
                }
            }
            return false;
        }

        private bool EliminaDeclaracionAdvertencia()
        {
            clsDeclaracionAdvertencia_CD objDeclaracion_CD = new clsDeclaracionAdvertencia_CD();
            return objDeclaracion_CD.EliminaDeclaracion(this);
        }

        private bool ActualizaDeclaracionAdvertencia()
        {
            clsDeclaracionAdvertencia_CD objDeclaracion_CD = new clsDeclaracionAdvertencia_CD();
            return objDeclaracion_CD.ModificaDeclaracionAdvertencia(this);
        }

        private bool CreaDeclaracionAdvertencia()
        {
            clsDeclaracionAdvertencia_CD objDeclaracion_CD = new clsDeclaracionAdvertencia_CD();
            if (objDeclaracion_CD.CreaNuevaDeclaracionAdvertencia(this))
            {
                this.EsModificado = true;
                return true;
            }
            return false;
        }

        public bool DatosValidos()
        {
            return true;
        }

        public static BindingList<clsDeclaracionAdvertencia_CRN> RecuperaDeclaracionesAdvertencias(clsAvaluo_CRN objAvaluo, string tipo)
        {
            BindingList<clsDeclaracionAdvertencia_CRN> blDeclaracionesAdvertencias = new BindingList<clsDeclaracionAdvertencia_CRN>();
            clsDeclaracionAdvertencia_CD objDeclaracion_CD = new clsDeclaracionAdvertencia_CD();
            BindingList<dsAvaluos.Declaraciones_AdvertenciasRow> blDeclaracionesRecuperadas = objDeclaracion_CD.RecuperaDeclaraciones_o_Advertencias(objAvaluo.IdAvaluo, tipo);
            foreach (dsAvaluos.Declaraciones_AdvertenciasRow filaDeclaracion in blDeclaracionesRecuperadas)
            {
                clsDeclaracionAdvertencia_CRN objDeclaracion = new clsDeclaracionAdvertencia_CRN(objAvaluo, tipo);
                objDeclaracion.Descripcion = filaDeclaracion.Descripcion;
                objDeclaracion.ID = filaDeclaracion.ID;
                objDeclaracion.EsModificado = true;
                blDeclaracionesAdvertencias.Add(objDeclaracion);
            }
            return blDeclaracionesAdvertencias;
        }

        public static clsDeclaracionAdvertencia_CRN RecuperaDeclaracionAdvertencia(clsAvaluo_CRN objAvaluo, string tipo)
        {
            clsDeclaracionAdvertencia_CRN objDeclaracion = new clsDeclaracionAdvertencia_CRN(objAvaluo,tipo);
            clsDeclaracionAdvertencia_CD objDeclaracion_CD = new clsDeclaracionAdvertencia_CD();
            dsAvaluos.Declaraciones_AdvertenciasRow DeclaracionRecuperada = objDeclaracion_CD.RecuperaDeclaracion_o_Advertencia(objAvaluo.IdAvaluo, tipo);
            if (DeclaracionRecuperada != null)
            {
                objDeclaracion.Descripcion = DeclaracionRecuperada.Descripcion;
                objDeclaracion.ID = DeclaracionRecuperada.ID;
                objDeclaracion.EsModificado = true;
            }
            return objDeclaracion;
        }
    }
}
